"""
@creative_time = 2025/10/21 19:29
"""
# 在线购物车
"""题目二：简单的购物车系统【购物车类】
目标：创建一个 ShoppingCart 类，模拟一个简单的在线购物车。

要求：

这个类应该包含以下属性：

items (一个字典，用于存储商品。键是商品名称，值是商品数量。初始为空字典 {})

这个类应该包含以下方法：

__init__(self)：构造方法，初始化一个空购物车。

add_item(self, item_name, quantity=1)：添加商品。

如果商品已存在，则增加其数量。

如果商品不存在，则将商品加入购物车。

remove_item(self, item_name, quantity=1)：移除商品。

减少指定商品的数量。

如果减少后数量为 0 或更少，则从购物车中删除该商品。

view_cart(self)：查看购物车。打印出购物车内所有商品及其数量。如果购物车为空，则打印"购物车为空。"。

任务：

根据上述要求，写出 ShoppingCart 类的完整代码。

创建一个购物车对象。

执行以下操作序列：

添加 2 个"苹果"。

添加 1 个"香蕉"。

再添加 1 个"苹果"。

查看购物车。

移除 1 个"苹果"。

查看购物车。

尝试移除 3 个"香蕉" (这将导致香蕉被移除)。

查看最终购物车状态。"""


class ShoppingCart:
    def __init__(self):  # 键是商品名称，值是商品数量
        self.items = {}  # 购物车不是固定的属性,它会根据**每个用户**添加的商品不同而改变
#  给这个**具体的会变化的购物车对象**添加一个叫 items 的属性，它的值是一个空字典

    def add_item(self, item_name, quantity=1):  # 添加商品
        if item_name in self.items:  # 商品存在
            self.items[item_name] += quantity  # 在key 'item_name'的**键**上加数量,而数量默认为1
# 即为商品数量大于一,则数量加一
        else:  # 商品不存在
            self.items[item_name] = quantity  # 不存在则加一

    def remove_item(self, item_name, quantity):  # 移除商品
        if item_name in self.items:
            if self.items[item_name] > quantity:
                self.items[item_name] -= quantity
                print(f"已移除{quantity}个{item_name}")
            else:
                del self.items[item_name]
                print(f"已移除所有{item_name}")
        else:  # 商品不在购物车里
            print(f"购物车中没有{item_name}!")

    def view_cart(self):  # 查看购物车
        if self.items:
            print("购物车内容:")
            for item_name, quantity in self.items.items():  # .items()遍历字典
                print(f"{item_name} {quantity}个")
        else:
            print("购物车为空")


sc1 = ShoppingCart()  # 正因items不是固定属性,所以创建一个购物车无需上传商品,不需要上传额外信息
sc1.add_item("苹果", 2)
sc1.add_item("香蕉", 1)
sc1.add_item("苹果", 1)
sc1.view_cart()
sc1.remove_item("苹果", 1)
sc1.view_cart()
sc1.remove_item("香蕉", 3)
sc1.view_cart()
